import demo1.Card;
import demo1.CardGame;
import demo2.MySingleList;

import java.util.ArrayList;
import java.util.List;

/**
 * 杨辉三角 + 扑克牌
 */
public class Test {
    /**
     * 单链表的实现
     * @param args
     */
    public static void main3(String[] args) {
        MySingleList mySingleList = new MySingleList();
        //直接创建一个单链表
//        mySingleList.create();
//        mySingleList.display();
        //头插
        mySingleList.addFirst(12);
        mySingleList.addFirst(23);
        mySingleList.addFirst(45);
        mySingleList.addFirst(45);
        mySingleList.display();
        int count = mySingleList.size();
        System.out.println(count);
        //查找节点key
        boolean flag = mySingleList.contains(111);
        System.out.println(flag);
        //尾插
        mySingleList.addLast(222);
        mySingleList.addLast(222);
        mySingleList.addLast(34);
        mySingleList.addLast(45);
        mySingleList.display();
        //任意位置插入
        mySingleList.addIndex(1,222);
        mySingleList.display();
        //删除指定元素key
        mySingleList.remove(45);
        mySingleList.display();
        //删除所有元素
        mySingleList.removeAllKey(45);
        mySingleList.display();
    }
    /**
     * 扑克牌->demo1
     * @param args
     */
    public static void main2(String[] args) {
        CardGame cardGame = new CardGame();
        List<Card> ret = cardGame.buyCards();
        System.out.println("买牌: ");
        System.out.println(ret);

        System.out.println("洗牌; ");
        cardGame.shuffle(ret);
        System.out.println(ret);

        System.out.println("发牌: ");
        List<List<Card>> hand = cardGame.getCard(ret);

        for(int i = 0;i < hand.size();i++) {
            System.out.print("第"+ (i + 1) + "人牌为: " + hand.get(i));
            System.out.println();
        }

        System.out.println("剩余牌: ");
        System.out.println(ret);
    }
    /**
     * 力扣->118.杨辉三角
     * @param args
     *      1.理解List<List<Integer>
     *      2.对一维数组进行处理
     *      3.二维数组指向一维数组
     *      4.返回对象
     */
    public static List<List<Integer>> generate(int numRows) {
        List<List<Integer>> ret = new ArrayList<>();
        List<Integer> list = new ArrayList<>();

        list.add(1);
        ret.add(list);

        for(int i = 1;i < numRows;i++) {
            List<Integer> corRow = new ArrayList<>();//理解为一维数组
            //处理第一个数字
            corRow.add(1);
            //找到上一行的对应数组
            List<Integer> prevRow = ret.get(i - 1);
            //处理中间数字
            for(int j = 1;j < i;j++) {
                //找到对应值
                int x = prevRow.get(j) + prevRow.get(j - 1);
                corRow.add(x);
            }
            //处理最后一个数字
            corRow.add(1);

            ret.add(corRow);
        }
        return ret;
    }
    public static void main1(String[] args) {
        List<List<Integer>> ret = generate(5);
        for (List<Integer> x : ret) {
            for(Integer xx : x) {
                System.out.print(xx + " ");
            }
            System.out.println();
        }
    }
}
